package DataStructureAndAlgorithm.Tedukuri.二分;
import java.util.Scanner;
//实数集合上的二分
//题解理解：https://www.acwing.com/solution/content/1148/
//二分可以理解成找答案，然后通过验证这个答案是否成立
//可以想象成选择题猜答案，带答案进入到式子中看是否正确
public class AcWing_102 {
    static int n,f;
    static int N = 100010;
    static int[] cows = new int[N];
    static double[] sum = new double[N];
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        n = in.nextInt();
        f = in.nextInt();
        for (int i = 1; i <= n; i++){
            cows[i] = in.nextInt();
        }
        //实数集上的二分
        double l = 0, r = 2000;
        while (r - l > 1e-5){
            double mid = (l + r) / 2;
            if (check(mid)) l = mid;
            else r = mid;
        }
        System.out.println((int)(r * 1000));
    }
    static boolean check(double avg){
        //因为都减去了avg，则对于cows[i] - avg>0时，对于和是起正向贡献的，反之起负向贡献
        //因此，只要在i~j-f之间，存在一个sum[i] <= sum[j]，则说明合法
        //先求出减去平均值之后的前缀和
        for (int i = 1; i <= n; i++)sum[i] = sum[i - 1] + cows[i] - avg;
        double minv = 0;
        //再求是否存在以cows[j]结尾，且长度大于等于f的连续序列。
        for (int i = 0, j = f; j <= n; j++,i++){
            minv = Math.min(minv,sum[i]);
            if (sum[j] >= minv)return true;
        }
        return false;
    }
}

/*
农夫约翰的农场由 N 块田地组成，每块地里都有一定数量的牛，其数量不会少于 1 头，也不会超过 2000

头。

约翰希望用围栏将一部分连续的田地围起来，并使得围起来的区域内每块地包含的牛的数量的平均值达到最大。

围起区域内至少需要包含 F
块地，其中 F

会在输入中给出。

在给定条件下，计算围起区域内每块地包含的牛的数量的平均值可能的最大值是多少。
输入格式

第一行输入整数 N
和 F

，数据间用空格隔开。

接下来 N
行，每行输入一个整数，第 i+1 行输入的整数代表第 i

片区域内包含的牛的数目。
输出格式

输出一个整数，表示平均值的最大值乘以 1000

再 向下取整 之后得到的结果。
数据范围

1≤N≤100000

1≤F≤N

输入样例：

10 6
6
4
2
10
3
8
5
9
4
1

输出样例：

6500

 */